﻿using System.Collections.Generic;
using Wedn.Core.Common;
using Wedn.Core.Entity;

namespace Wedn.Core.Service
{
    /// <summary>
    /// 评论管理类
    /// </summary>
    public class CommentManager
    {
        private Wedn.Interface.DAL.IComment dao;
        /// <summary>
        /// 评论管理类构造函数
        /// </summary>
        /// <exception cref="未找到系统数据库访问组件"></exception>
        public CommentManager()
        {
            dao = Wedn.Interface.DAOFactory.CreateCommentDAOInstance();
            if (dao == null)
            {
                throw new System.Exception("缺失数据库访问组件!");
            }
        }
        /// <summary>
        /// 向评论表中插入一行数据, 返回执行结果受影响行数
        /// </summary>
        /// <param name="comment">要增加的评论对象</param>
        /// <returns>执行结果受影响行数</returns>
        public int Insert(Comment comment)
        {
            return dao.Insert(comment);
        }

        /// <summary>
        /// 根据评论ID删除评论表中的评论记录, 返回执行结果受影响行数
        /// </summary>
        /// <param name="id">要删除的评论ID</param>
        /// <returns>执行结果受影响行数</returns>
        public int Delete(int id)
        {
            return dao.Delete(id);
        }

        /// <summary>
        /// 根据评论ID数组删除评论表中的评论记录, 返回执行结果受影响行数
        /// </summary>
        /// <param name="ids">要删除的评论ID数组</param>
        /// <returns>执行结果受影响行数</returns>
        public int Delete(int[] ids)
        {
            return dao.Delete(ids);
        }

        /// <summary>
        /// 根据评论状态删除评论表中的评论记录, 返回执行结果受影响行数
        /// </summary>
        /// <param name="status">要删除的评论的状态(0:待审核,1:审核通过,2:回收站,3:垃圾评论)</param>
        /// <returns>执行结果受影响行数</returns>
        public int DeleteByStatus(CommentStatus status)
        {
            return dao.DeleteByStatus((int)status);
        }

        /// <summary>
        /// 更新一个完整评论对象, 返回执行结果受影响行数
        /// </summary>
        /// <param name="comment">更新的评论对象</param>
        /// <returns>执行结果受影响行数</returns>
        public int UpdateComment(Comment comment)
        {
            return dao.UpdateComment(comment);
        }

        /// <summary>
        /// 根据评论ID数组批量更新多个评论状态, 返回执行结果受影响行数
        /// </summary>
        /// <param name="ids">评论ID数组</param>
        /// <param name="status">更新的状态(0:待审核,1:审核通过,2:回收站,3:垃圾评论)</param>
        /// <returns>执行结果受影响行数</returns>
        public int UpdateStatus(int[] ids, CommentStatus status)
        {
            return dao.UpdateStatus(ids, (int)status);
        }

        /// <summary>
        /// 获取表中主键最大值, 返回主键最大值
        /// </summary>
        /// <returns>主键最大值</returns>
        public int GetMaxId()
        {
            return dao.SelectMaxId();
        }

        /// <summary>
        /// 选取评论总数
        /// </summary>
        /// <param name="where">选择条件(忽略则传入null或空值)</param>
        /// <returns>总数</returns>
        public int GetCommentsCount(string where)
        {
            return dao.SelectCommentsCount(where);
        }

        /// <summary>
        /// 获取评论表中所有评论信息对象, 返回对象信息集合, 如果不存在则返回空集合
        /// </summary>
        /// <returns>所有评论对象信息集合</returns>
        public List<Comment> GetCommentList()
        {
            List<Comment> list = dao.SelectCommentList();
            if (list == null)
                list = new List<Comment>();
            return list;
        }

        /// <summary>
        /// 根据文章ID及页码从评论表中获取指定条数评论信息, 返回评论信息对象集合, 如果不存在则返回空集合
        /// </summary>
        /// <param name="status">状态(0:待审核,1:审核通过,2:回收站,3:垃圾评论)</param>
        /// <param name="postId">文章ID</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">显示条数</param>
        /// <returns>符合条件评论信息对象集合</returns>
        public List<Comment> GetCommentList(CommentStatus status, int postId, int pageIndex, int pageSize)
        {
            List<Comment> list = dao.SelectCommentList((int)status, postId, pageIndex, pageSize);
            if (list == null)
                list = new List<Comment>();
            return list;
        }

        /// <summary>
        /// 根据筛选条件从评论表中获取指定条数评论信息, 返回评论信息对象集合
        /// 如果指定int类型参数传入-1, string传入null, 则表示忽略该检索条件
        /// 将默认按照发布时间降序排序, 返回评论信息对象集合, 如果不存在则返回空集合
        /// </summary>
        /// <param name="keyword">关键词(忽略该条件则传入null)</param>
        /// <param name="status">状态(0:待审核,1:审核通过,2:回收站,3:垃圾评论)</param>
        /// <param name="pageSize">文章数目</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="orderField">排序字段</param>
        /// <param name="order">排序方式(0:降序(desc)|1:升序(asc))</param>
        /// <param name="recordCount">返回查询到的记录数</param>
        /// <returns>符合条件评论信息对象集合</returns>
        public List<Comment> GetCommentList(string keyword, CommentStatus status, int pageIndex, int pageSize, string orderField, int order, out int recordCount)
        {
            List<Comment> list = dao.SelectCommentList(keyword, (int)status, pageIndex, pageSize, orderField, order, out recordCount);
            if (list == null)
                list = new List<Comment>();
            return list;
        }

        /// <summary>
        /// 根据评论ID获取评论表中所有评论对象, 返回评论对象, 如果不存在则返回null
        /// </summary>
        /// <param name="id">评论ID</param>
        /// <returns>评论对象</returns>
        public Comment GetComment(int id)
        {
            return dao.SelectComment(id);
        }
    }
}
